package cn.kgc.spring.basic.factory;

import cn.kgc.spring.basic.UserMapper;
import cn.kgc.spring.basic.UserService;

import java.util.ResourceBundle;

/**
 * @author: mosin
 * @version: v1.0  2022/6/29
 *
 * 工厂创建对象如何解耦
 * 存在原因：  使用 new关键词创建对象
 *
 * 创建对象的方式：
 * 1.   new 调用构造方法
 * 2.  反射
 *      1.获取类对象  Class  clazz
 *       获取类对象的方式：
 *          1. 类名.class
 *          2. Class.forName("全类名")  推荐   更灵活
 *          3.对象.getClass()
 *
 * 配合使用   配置文件 properties   实现进一步的解耦
 *
 */
public class BeanFactory {

    private static  ResourceBundle rb;

    static{

        // 加载配置文件
        rb = ResourceBundle.getBundle("applicationContext");
        String userService = rb.getString("userService");
        System.out.println("userService = " + userService);
    }

    public static UserService getUserServiceImpl(){
        UserService userService =null;
        try {
            // 类的全类名 需要读取配置文件
            Class<?> clazz = Class.forName(rb.getString("userService"));
            userService = (UserService) clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return userService;
    }


    public static UserMapper getUserMapperImpl(){

        UserMapper userMapper =null;
        try {
            Class<?> clazz = Class.forName(rb.getString("userMapper"));
            userMapper = (UserMapper) clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return userMapper;
    }


}
